6.15 --permission-mode - 指定权限模式

6 分钟阅读

概述#

--permission-mode 标志允许您指定 Claude Code 的权限模式,控制工具调用的权限检查行为。这对于安全性和自动化场景非常重要。

基本语法#

bash
claude --permission-mode <模式>

可用模式#

模式描述使用场景
auto自动批准权限(默认)自动化脚本、可信环境
manual手动批准权限交互式开发、需要审查
always-approve始终批准所有权限完全自动化、高度信任
always-deny始终拒绝所有权限只读模式、安全审查

使用场景#

1. 自动化脚本使用 auto#

bash
# 自动化脚本中自动批准权限 claude --permission-mode auto -p "生成并保存代码" # 所有工具调用都会自动批准

2. 交互式开发使用 manual#

bash
# 交互式开发中手动批准权限 claude --permission-mode manual # 每次工具调用都需要手动批准

3. 完全自动化使用 always-approve#

bash
# 完全自动化的 CI/CD 流程 claude --permission-mode always-approve -p "部署应用" # 所有权限都会自动批准

4. 只读模式使用 always-deny#

bash
# 只读模式,只允许读取操作 claude --permission-mode always-deny --allowedTools "Read" "Grep" -p "分析代码" # 所有写入操作都会被拒绝

高级用法#

1. 与其他标志组合#

bash
# 权限模式 + 限制工具 claude --permission-mode auto --allowedTools "Read" "Grep" -p "分析代码" # 权限模式 + 指定模型 claude --permission-mode manual --model opus -p "生成代码" # 权限模式 + 自定义系统提示 claude --permission-mode auto --system-prompt "你是一位 Python 专家" -p "编写代码"

2. 根据环境选择权限模式#

bash
#!/bin/bash # select-permission-mode.sh ENV=$1 case "$ENV" in "production") MODE="manual" ;; "staging") MODE="auto" ;; "development") MODE="always-approve" ;; "readonly") MODE="always-deny" ;; *) MODE="manual" ;; esac echo "使用权限模式: $MODE" claude --permission-mode "$MODE" -p "完成任务"

3. 安全的自动化流程#

bash
#!/bin/bash # safe-automation.sh # 只允许读取和搜索 claude \ --permission-mode auto \ --allowedTools "Read" "Grep" \ -p "分析代码结构" # 手动批准写入操作 claude \ --permission-mode manual \ -p "生成代码"

4. 分阶段权限控制#

bash
#!/bin/bash # staged-permission.sh # 第一阶段:只读分析 echo "只读分析..." claude --permission-mode always-deny --allowedTools "Read" "Grep" -p "分析代码" # 第二阶段:手动批准写入 echo "手动批准写入..." claude --permission-mode manual -p "生成代码" # 第三阶段:自动部署 echo "自动部署..." claude --permission-mode always-approve -p "部署应用"

实际应用示例#

示例 1: CI/CD 流程#

bash
#!/bin/bash # cicd-pipeline.sh # 阶段 1:代码分析(只读) echo "代码分析..." claude \ --permission-mode always-deny \ --allowedTools "Read" "Grep" \ -p "分析代码质量" > analysis.txt # 阶段 2:测试生成(自动批准) echo "生成测试..." claude \ --permission-mode auto \ -p "生成测试代码" > tests.py # 阶段 3:部署(手动批准) echo "部署应用..." claude \ --permission-mode manual \ -p "部署到生产环境" echo "CI/CD 流程完成"

示例 2: 安全审查#

bash
#!/bin/bash # security-audit.sh # 只读模式进行安全审查 claude \ --permission-mode always-deny \ --allowedTools "Read" "Grep" \ -p "进行安全审查" > security-audit.txt # 检查结果 if grep -qi "vulnerability\|漏洞" security-audit.txt; then echo "发现安全问题,请审查" exit 1 fi echo "安全审查通过"

示例 3: 开发环境设置#

bash
#!/bin/bash # dev-environment.sh # 开发环境:自动批准 if [ "$ENV" = "development" ]; then claude --permission-mode always-approve -p "开发功能" # 生产环境:手动批准 elif [ "$ENV" = "production" ]; then claude --permission-mode manual -p "部署功能" fi

示例 4: 代码生成流程#

bash
#!/bin/bash # code-generation.sh # 分析阶段(只读) echo "分析阶段..." claude \ --permission-mode always-deny \ --allowedTools "Read" "Grep" \ -p "分析现有代码" > analysis.txt # 生成阶段(自动批准) echo "生成阶段..." claude \ --permission-mode auto \ -p "基于分析生成代码" > generated-code.txt # 审查阶段(手动批准) echo "审查阶段..." claude \ --permission-mode manual \ -p "审查生成的代码" echo "代码生成完成"

权限模式对比#

1. Auto 模式#

特点说明
行为自动批准大多数权限
适用自动化脚本、可信环境
安全性中等
效率

2. Manual 模式#

特点说明
行为手动批准所有权限
适用交互式开发、需要审查
安全性
效率

3. Always-approve 模式#

特点说明
行为始终批准所有权限
适用完全自动化、高度信任
安全性
效率最高

4. Always-deny 模式#

特点说明
行为始终拒绝所有权限
适用只读模式、安全审查
安全性最高
效率中等

最佳实践#

1. 根据环境选择模式#

bash
# 开发环境:always-approve if [ "$ENV" = "development" ]; then MODE="always-approve" # 测试环境:auto elif [ "$ENV" = "testing" ]; then MODE="auto" # 生产环境:manual elif [ "$ENV" = "production" ]; then MODE="manual" fi claude --permission-mode "$MODE" -p "完成任务"

2. 分离读写操作#

bash
# 只读操作使用 always-deny claude --permission-mode always-deny --allowedTools "Read" "Grep" -p "分析代码" # 写入操作使用 manual claude --permission-mode manual -p "生成代码"

3. 使用工具限制增强安全#

bash
# 结合权限模式和工具限制 claude \ --permission-mode auto \ --allowedTools "Read" "Grep" "Write" \ --disallowedTools "RunCommand" \ -p "分析代码"

4. 记录权限决策#

bash
#!/bin/bash # log-permissions.sh LOG_FILE="permissions-$(date +%Y%m%d-%H%M%S).log" claude --permission-mode manual -p "生成代码" 2>&1 | tee "$LOG_FILE" echo "权限决策已记录到 $LOG_FILE"

常见问题#

Q1: 如何选择合适的权限模式?#

A: 根据环境和使用场景选择。开发环境用 always-approve,生产环境用 manual,自动化脚本用 auto。

Q2: 可以在会话中切换权限模式吗?#

A: 不可以。权限模式在会话开始时确定,整个会话使用同一个模式。

Q3: always-approve 模式安全吗?#

A: 不安全。建议只在高度信任的环境中使用,如本地开发环境。

Q4: 如何在 CI/CD 中使用权限模式?#

A: 使用 auto 或 always-approve 模式,确保自动化流程不会因为权限提示而中断。

Q5: always-deny 模式有什么用?#

A: 用于只读操作,如代码分析、安全审查等,确保不会意外修改文件。

与其他标志的组合示例#

1. 安全的开发流程#

bash
#!/bin/bash # secure-dev-flow.sh # 只读分析 claude --permission-mode always-deny --allowedTools "Read" "Grep" -p "分析代码" # 手动批准生成 claude --permission-mode manual -p "生成代码" # 自动测试 claude --permission-mode auto -p "运行测试"

2. 自动化部署#

bash
#!/bin/bash # automated-deploy.sh # 只读检查 claude --permission-mode always-deny -p "检查部署准备" > check.txt # 自动部署 claude --permission-mode always-approve -p "部署应用"

3. 安全审查流程#

bash
#!/bin/bash # security-review.sh # 只读审查 claude --permission-mode always-deny --allowedTools "Read" "Grep" -p "安全审查" > audit.txt # 手动批准修复 claude --permission-mode manual -p "修复安全问题"

总结#

--permission-mode 标志提供了一种控制工具调用权限的方式。通过选择不同的权限模式,您可以:

  • 平衡安全性和效率
  • 根据环境调整权限策略
  • 实现自动化和手动控制的混合
  • 增强安全性,防止意外操作

合理使用 --permission-mode 可以帮助您在不同场景下获得最佳的安全性和效率平衡。

标记本节教程为已读

记录您的学习进度,方便后续查看。